// node api -> 框架层 
// react 单页应用 MVVM 模式的项目 Model View ViewModel
// 后端 MVC  Model(数据模式, model文件夹  ts) View(html) C(controller)
// W v 不能直接通信 controller 来管理
const Koa = require('koa'); // 第三方 最好用的node 后端框架 遵守mvc开发范式
const app = new Koa; // web server 理解为一个 server app
const path = require('path');
const staticServer = require('koa-static')
// use启用一个中间件  函数   
// app.use redux compose
// ctx context 
// res => req 
// ctx = req + res
// applyMiddleware 挂载中间件
// 静态服务器  js css img file 
// 中间件有顺序 数组 compose
const koaSession = require('koa-session'); // 中间件
const session_signed_key = ["secret"]; //key 

app.keys = session_signed_key;
const session_config = {
  key: 'koa:sess', /**  cookie的key。 (默认是 koa:sess) */
  maxAge: 1000 * 60*60,   /**  session 过期时间，以毫秒ms为单位计算 。*/
  autoCommit: true, /** 自动提交到响应头。(默认是 true) */
  overwrite: true, /** 是否允许重写 。(默认是 true) */
  httpOnly: true, /** 是否设置HttpOnly，如果在Cookie中设置了"HttpOnly"属性，那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息，这样能有效的防止XSS攻击。  (默认 true) */
  signed: true, /** 是否签名。(默认是 true) */
  rolling: true, /** 是否每次响应时刷新Session的有效期。(默认是 false) */
};
const session = koaSession(session_config, app)

// 使用中间件，注意有先后顺序
app.use(session);
app.use(staticServer(path.join(__dirname,'./static')))
app.use(async ctx => {
    // 后端种了一个uid的cookie
    if(ctx.path== '/login') {
        const {userName , password}= ctx.query;
        console.log(userName,password,'-----');
        if(userName == 'text' && password == '123') {
            ctx.session.login = {
                name: userName,
                uid: 2,
                sex: '男'
              }
              ctx.type = 'html'
              ctx.body = `
              登录成功
              <a href="/testlogin">去测试登录</a>
              `;
            }
        }
        else if (ctx.path == '/testlogin'){
            console.log(ctx.session, '/////');
            if (!ctx.session.login.name) {
              ctx.redirect('/');
            }
             else {
               ctx.body = '已经登录' + ctx.session.login.name;
             }
          
        
    }
    // ctx.body = ctx.url; 
    // domain + path  为了cookie 安全
    // ctx.cookies.set('uid','123456789',{
    //     path:'/admin',
    //     maxAge: 1000*10*60,
    //     httpOnly:true``
    // }) 
    // mvc controller
    // 支持异步 
    // 数据库的查询 异步的
    // await db.find()
    // ctx.body = `Hello World`
})
app.listen(1314);